coredump配置
开启coredump功能
输入命令ulimit
,其输出代表生成的core文件大小的限制,如果输出为0,则说明coredump功能没有开启。
使用命令ulimit -c unlimited
开启coredump功能,并且不限制core文件的大小。
如果要限制core文件的大小,则将unlimited替换为要限制的core文件的大小,单位为block(KB)。
Core文件的保存路径
core文件的生成位置由/proc/sys/kernel/core_pattern
中的配置决定。默认情况下,其内容为cor
,程序出错时将在工作目录生成名为core的core文件。(此处不确定)
可以将配置文件内容改为/home/ubuntu/sdcard/CoreDump/core-%e-%p-%t
,则core文件生成在目录/home/ubuntu/sdcard/CoreDump,文件名的格式为core-命令名-pid-时间戳。
修改配置文件时不能直接用编辑器编辑/proc/sys/kernel/core_pattern
。需要先用su命令切换为root用户,然后使用命令编辑文件:
1 | echo /home/coredump/corename > /proc/sys/kernel/core_pattern |
上述命令将core文件生成在/home/coredump/目录下。
core文件的命名规则:
%p - pid
%u - uid
%g - 当前gid
%s - 导致产生core的信号
%t - core文件生成的unix时间
%h - 主机名
%e - 命令名
若要将core文件生成位置恢复为默认,使用以下命令:
1 | echo core > /proc/sys/kernel/core_pattern |
core文件的读取
有了core文件之后,可以使用GDB来进行调试。
调试方式为使用命令:1
gdb program core
其中program为生成core文件的对应程序名,core为core文件名。
例如,现有test.c内容如下:
1 |
|
运行test,生成core文件,以默认设置为例,则core生成在当前目录。
使用命令gdb test core
,结果如下:
1 | ... |
可以看到程序错误的原因在最后两行显示。可以使用where命令再次显示程序崩溃原因。